package net.jcip.chapter2;

import java.math.BigInteger;
import javax.servlet.*;

import net.jcip.annotations.*;

/**
 * StatelessFactorizer 从 servlet 请求中获取值, 并进行因数分解
 *
 * A stateless servlet 无状态的 servlet , 这个是线程安全的
 *
 *
 * 与大多数Servlet相同，StatelessFactorizer是无状态的：它既不包含任何域，也不
 * 含任何对其他类中域的引用。计算过程中的临时状态仅存在于线程栈上的局部变量中，
 * 且只能由正在执行的线程访问。访问StatelessFactorizer的线程不会影响另一个访问同一
 * StatelessFactorizer的线程的计算结果，因为这两个线程并没有共享状态，就好像它们都在访
 * 不同的实例。由于线程访问无状态对象的行为并不会影响其他线程中操作的正确性，因此无
 * 态对象是线程安全的。
 *
 *
 * @author Brian Goetz and Tim Peierls
 */
@ThreadSafe
public class StatelessFactorizer extends GenericServlet implements Servlet {

    public void service(ServletRequest req, ServletResponse resp) {
        BigInteger i = extractFromRequest(req);
        BigInteger[] factors = factor(i);
        encodeIntoResponse(resp, factors);
    }

    void encodeIntoResponse(ServletResponse resp, BigInteger[] factors) {
    }

    BigInteger extractFromRequest(ServletRequest req) {
        return new BigInteger("7");
    }

    BigInteger[] factor(BigInteger i) {
        // Doesn't really factor
        return new BigInteger[] { i };
    }
}
